﻿//IEmulationTrader.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo.Testing
{
	using System;

	using StockSharp.BusinessEntities;

	/// <summary>
	/// Состояния <see cref="IEmulationTrader"/>.
	/// </summary>
	public enum EmulationStates
	{
		/// <summary>
		/// Остановлен.
		/// </summary>
		Stopped,

		/// <summary>
		/// Останавливается.
		/// </summary>
		Stopping,

		/// <summary>
		/// Запускается.
		/// </summary>
		Starting,

		/// <summary>
		/// Работает.
		/// </summary>
		Started,

		/// <summary>
		/// В процессе приостановки.
		/// </summary>
		Suspending, 

		/// <summary>
		/// Приостановлен.
		/// </summary>
		Suspended,
	}
	
	/// <summary>
	/// Интерфейс шлюза-эмулятора биржи.
	/// </summary>
	public interface IEmulationTrader : ITrader
	{
		/// <summary>
		/// Начать эмуляцию.
		/// </summary>
		/// <param name="startTime">Время в истории, с которого начать эмуляцию.</param>
		/// <param name="stopTime">Время в истории, на котором закончить эмуляцию.</param>
		void Start(DateTime startTime, DateTime stopTime);

		/// <summary>
		/// Остановить эмуляцию.
		/// </summary>
		void Stop();

		/// <summary>
		/// Приостановить эмуляцию.
		/// </summary>
		void Suspend();

		/// <summary>
		/// Возобновить эмуляцию.
		/// </summary>
		void Resume();

		/// <summary>
		/// Состояние эмулятора.
		/// </summary>
		EmulationStates State { get; }

		/// <summary>
		/// Событие о изменении состояния эмулятора <see cref="State"/>.
		/// </summary>
		event Action<EmulationStates,EmulationStates> StateChanged;
	}
}